#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
//#include <fcntl.h>

//int main()
//{
//    int fds[2];
//    char buf[100];
//    int len;
//    if ( pipe(fds) == -1 )
//        perror("make pipe"),exit(1);
//    // read from stdin
//    while ( fgets(buf, 100, stdin) ) 
//    {
//        len = strlen(buf);
//        // write into pipe
//        if ( write(fds[1], buf, len) != len ) 
//        {
//            perror("write to pipe");
//            break;
//        }
//        memset(buf, 0x00, sizeof(buf));
// 
//        // read from pipe
//        if ( (len=read(fds[0], buf, 100)) == -1 ) 
//        {
//            perror("read from pipe");
//            break;
//        }
//        // write to stdout
//        if ( write(1, buf, len) != len ) 
//        {
//            perror("write to stdout");
//            break;
//        }
//    }
//    return 0;
//}

int main()
{
    int fds[2];
    int ret = pipe(fds);
    if(ret == -1)
    {
        perror("pipe: ");
        exit(-1);
    }

    pid_t id = fork();
    if(id == 0)
    {
        //子进程 读
        printf("子进程创建成功，pid: %d\n",getpid());
        char buf[10]={0};
        close(fds[1]);

        int n=0;
        while(1)
        {
            ssize_t s = read(fds[0],buf,9);
            //printf("子进程在读: pid: %d\n",getpid());
            printf("s = %d ",(int)s);
            printf("子进程在读：pid: %d, read: %s\n",getpid(),buf);
            sleep(1);
            if(n++ == 5)
            {
                close(fds[0]);
                //sleep(100);
                while(n--)
                {
                    printf("子进程关闭读端\n");
                    sleep(1);
                }
            }
        };

        //while(1)
        //{
        //    ssize_t s = read(fds[0],buf,9);
        //    printf("s = %d ",(int)s);
        //    if(s > 0)
        //        printf("子进程在读：pid: %d, read: %s\n",getpid(),buf);
        //    else if(s == 0)
        //        printf("写端关闭，read返回值为0\n"); 
        //    sleep(1);
        //}
    }
    close(fds[0]);//父进程写
    while(1)
    {
        printf("父进程在写，pid: %d\n",getpid());
        write(fds[1],"hello",5);
        sleep(1);
    }
   // int n=0;
   // while(1)
   // {
   //     printf("n = %d ", n);
   //     printf("父进程pid: %d\n",getpid());
   //     write(fds[1],"hello",5);
   //     
   //     if(n++ == 5)
   //     {
   //         close(fds[1]);
   //         printf("父进程关闭写端\n");
   //         sleep(100);
   //     }
   //     sleep(1);
   // }
    return 0;
}
